Skip to content

feat(spec)!: 退役 RestServerConfig.openApi31 整块 —— declared ≠ enforced,零运行时读者 (#4579) - #4764

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-4579-retire-openapi31-block
Aug 3, 2026
Merged

feat(spec)!: 退役 RestServerConfig.openApi31 整块 —— declared ≠ enforced,零运行时读者 (#4579)#4764
os-zhuang merged 1 commit into
mainfrom
claude/issue-4579-retire-openapi31-block

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

Fixes #4579

按 2026-08-02 委托裁决(remove)整块删除:openApi31 键 + OpenApi31ExtensionsSchema + CallbackSchema + OpenApiWebhookEventSchema。enforce 等于新建「配置驱动的 OpenAPI webhooks/callbacks 文档合成」能力 —— 三仓零消费者、零运行时读者,没人在等它;作者写进 openApi31.webhooks 的定义永远不会出现在 /openapi.json,典型假合规(ADR-0049)。

三仓零 reader 重验(真实输出)

扫描基线:objectstack 65f184ba5(开工时 origin/main)、cloud @ 5df2c699b(= origin/main)、objectui @ 785b8a5d4(= origin/main)。逐模式 grep(*.ts/*.tsx/*.mts/*.mjs,排除 node_modules / dist / .d.ts):

### repo: objectstack @ 65f184ba5
  pattern 'openApi31':            4 match(es) — 全部在 rest-server.zod.ts(声明site)与 rest-server.test.ts(自身单测)
  pattern 'OpenApi31Extensions':  8 match(es) — 同上两文件
  pattern 'OpenApiWebhookEvent':  9 match(es) — 同上两文件
  pattern '\bCallbackSchema':     7 match(es) — 同上两文件
### repo: cloud @ 5df2c699b
  pattern 'openApi31':            NO MATCHES
  pattern 'OpenApi31Extensions':  NO MATCHES
  pattern 'OpenApiWebhookEvent':  NO MATCHES
  pattern '\bCallbackSchema':     NO MATCHES
### repo: objectui @ 785b8a5d4
  pattern 'openApi31':            NO MATCHES
  pattern 'OpenApi31Extensions':  NO MATCHES
  pattern 'OpenApiWebhookEvent':  NO MATCHES
  pattern '\bCallbackSchema':     NO MATCHES

(objectui 的 ActionCallbackSchema 是其自有无关 schema,\b 词界已排除。objectui types/src/index.ts:935export type * as API 是命名空间 type 透传,三名零成员引用,零迁移。)

运行时侧闭合调用图:packages/rest/src/rest-server.tsnormalizeConfig 只读 api/crud/metadata/batch/routes(config.openApi31 被静默丢弃);rest-server.ts / plugin-hono-server/src/hono-plugin.ts / packages/spec/scripts/build-openapi.ts 三文件对 openApi31|OpenApi31|webhooks|callback 的 grep 零命中。

墓碑机制取舍

RestServerConfigSchema 非 strict ⇒ 按技能手册分叉表走 retiredKey() 墓碑(本文件已有 requireAuth #3963 同款先例,无需新建 guidance 机制;UNKNOWN_KEY_GUIDANCE map 是 .strict() schema 的路线,不适用)。两通道:tsc(输入类型 never)+ parse(错误文案即处方,指向本单与「该能力从未生效」事实 + 未来 enforce 须经 ADR)。实测拒绝输出:

"path": ["openApi31"],
"message": "`RestServerConfig.openApi31` was removed in @objectstack/spec 17 (#4579, ADR-0049) — no runtime ever read it: ... Delete the key. Config-driven OpenAPI 3.1 webhooks/callbacks documentation is a new capability and must arrive via the enforce route of ADR-0049 (a new ADR), not by re-declaring the key; ..."

三个整 def(纯值 schema,除自身单测外零消费者)随键删除 —— 导出无消费者的 schema 会被读成能力(#3950 先例)。

conversion 评估结论(#4734 先例):不登记 D2,登记 D3 semantic

  • RestServerConfig插件 TS 配置面:仅有的作者门是 REST 插件构造参(rest-api-plugin.tsapi?: RestServerConfig)与 plugin-hono-serverrestConfig?: RestServerConfig
  • stack 树不载它:stack.zod.tsapi 块是独立内联对象,只声明 requireAuth(墓碑)/enableProjectScoping/projectResolution/enforceProjectMembership 四键,从未有 openApi31;defineStack 严格 parse 下未声明键根本进不了元数据面 ⇒ 存量 sys_metadata 行不可能携带 openApi31,无源可改写
  • 因此 D2 conversion(stripKeys)写不出能跑到的 fixture(与 batch-options-validate-only-retired「HTTP-only、非 stack conversion」同形),按 fix(spec): #3207 收尾 — 补上 enable.trash/mru 退役缺失的 ADR-0087 迁移面,墓碑改指 #3146 #4734 的评估纪律免登记 D2,改登记 D3 SemanticMigration:rest-server-openapi31-block-removed,surface restServer.openApi31(满足 build-schemas 检查 (b) 对 newly-tombstoned key 的登记要求),reason / acceptanceCriteria 完整,并入 step17 rationale。spec-changes.json / upgrade-guide 均已投影(gen:spec-changes / gen:upgrade-guide 实跑)。

#4650 门禁自证(实跑输出)

authorable-surface 14 行随三个整 def 出账,门禁判定路径 3(def no longer emitted):

ℹ️  3 baseline deletion(s) since 65f184ba5157 carry their own proof (#4650):
     - api/Callback:* (4 line(s)) — def no longer emitted by this build; whole-schema
       removals are adjudicated by json-schema.manifest.json (#2978) and check:api-surface.
     - api/OpenApi31Extensions:* (4 line(s)) — def no longer emitted by this build; ...
     - api/OpenApiWebhookEvent:* (6 line(s)) — def no longer emitted by this build; ...
🔑 authorable-surface.json updated (8244 keys) — commit it.

json-schema.manifest.json 三 def 删行走 #2978 蓄意移除通道(gen:schema 先红、同 PR 删行后绿);api/RestServerConfig:openApi31 翻转为 [RETIRED](生成器自写)。检查 (b) 由上述 semantic surface 满足(未登记时该门确会红,登记后静默通过)。基线不涉及:本单非 dual-source-exports.baseline.json 条目(#4572/C1 已清),KNOWN_STILL_DUAL_SOURCE / RENAMED_DEFS 未动。

回归 pin + sabotage(C6 PR #4745 形态)

  • compiler-API pin(rest-server.test.ts):从 package.json exports 枚举全部公共入口,断言任一入口不再命名六个导出名(3 const + 3 type),带防空转守卫(module symbol 必解析、./api 表面 > 50 导出、幸存邻居 RestServerConfigSchema/RestApiConfigSchema 在位);另有运行时命名空间一致性断言。
  • 墓碑 sabotage:authored openApi31: {...} → 拒绝且文案匹配 /RestServerConfig\.openApi31.*removed.*Delete the key/s;对照测试证明五个正常键仍全过(防「拒绝一切」),且 parse 结果 not.toHaveProperty('openApi31')
  • S1 sabotage 实测:临时重加 export const OpenApi31ExtensionsSchema2 failed | 45 passed(compiler-API pin 与 runtime-namespace pin 双双转红),revert 后 47/47 全绿。
  • spec 双源 C1:WebhookConfig / WebhookEvent —— ./api ≠ ./integration(4 条,#4535 C 组) #4572 的旧 pin(裸名 WebhookEventSchema/WebhookConfigSchema 不回流)保留并从条件类型改为运行时断言(packages/spec 的「编译期 pin」是失效的:tsconfig 排除了 *.test.ts,vitest 也不做类型检查 #4642:本包条件类型 pin 空转)。

changeset 论证(major 据实)

  • 新增 rest-server-openapi31-block-removed.md:major(删已发布导出名 ⇒ TS2305;删可作者化键 ⇒ parse 拒绝)。FROM→TO 与一行修法写明:删键即可、无替代值;真实出站 webhook 用 automationWebhook、connector 事件用 integrationWebhookEvent;未来 enforce 经 ADR。零元数据迁移(上文论证)。
  • 同 major 吸收 spec 双源 C1:WebhookConfig / WebhookEvent —— ./api ≠ ./integration(4 条,#4535 C 组) #4572 改名(技能 §0):webhook-dual-source-api-side.md 的 TO 指引原指向 OpenApiWebhookEvent(本 PR 删除的名字),已更正为幸存去处并注明 superseded —— 否则 CHANGELOG 会指导升级者 import 一个不存在的导出。该改名当时未走 RENAMED_DEFS(先于 C9 机制),表内无需清理。

严格性台账(实跑结论)

check:strictness-ledger PASS(改动前后均实跑)。api/ 行属台账「Other directories (coarse; classify per schema before touching)」汇总层,非门禁校验面;用台账自带 countSites 实测当前 api/ 总数为 411,而行内记录 426 —— 漂移大部分先于本 PR(本 PR 贡献 -3)。按手册 §5「以实跑结论为准、不反射式改」不动该行,漂移事实在此记录。

并行协议合规

  • 分区:本单只动 api/(rest-server)+ 全局登记面(migrations registry / changeset / 生成物),未触碰 system/、contracts/、automation/、integration/、data/、ai/ 的任何 def 文件。
  • 入队前 main 推进已处理:C16 PR feat(spec)!: 删除 ./system 的 declared-only tenant-provisioning 家族 —— C16 双源清账,基线 12 → 10 (#4739) #4752 落地后,本分支已 rebase 至 56470061d,生成物按协议从合并树重新生成(merge driver 主动拒绝 text-merge,rm -rf dist 全量重建后 gen:api-surface;曾捕获孤儿 dts chunk 把 C16 已删导出带回 api-surface 的 stale-dist 陷阱,清 dist 重建后消除),重跑 check:generated 8 门全绿 + spec 全量测试,并断言 api-surface delta vs origin/main 恰为本 PR 的六行删除。pre-commit 的 os-regen 钩子亦确认三份延迟生成物 current。
  • 重活全程走 flock /tmp/os-heavy-verify.lock + NODE_OPTIONS=--max-old-space-size=4096
  • .changeset/pre.json 开工实测仍 mode: pre / tag: rc(v17 窗口内)。

验证汇总

  • check:generated 8 门:全绿(rebase 后重跑)
  • 源码审计组:check:liveness / check:empty-state / check:skill-examples / check:variant-docs / check:strictness-ledger / check:exported-any / check:dual-source-exports / check:react-declaration-parity 全 PASS(liveness 台账无 api/ 条目,rest-server 不在 24 元数据类型内,无台账行可动)
  • pnpm --filter @objectstack/spec test:292 files / 7373 tests passed(rebase 后);typecheck PASS
  • 全仓 pnpm typecheck --concurrency=2:122/122 successful
  • pnpm check:i18n:9 包 in sync(无 form 变动)
  • 未启动任何 dev server;content/docs/releases/ 未触碰

🤖 Generated with Claude Code

https://claude.ai/code/session_0176qgxgCXTJCUv4YFLtusP9


Generated by Claude Code

@vercel

vercel Bot commented Aug 3, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
objectstack Ignored Ignored Aug 3, 2026 4:23am

Request Review

@github-actions github-actions Bot added documentation Improvements or additions to documentation tests tooling size/l labels Aug 3, 2026
@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 1 package(s): @objectstack/spec.

107 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:

  • content/docs/ai/agents.mdx (via @objectstack/spec)
  • content/docs/ai/skills-reference.mdx (via @objectstack/spec)
  • content/docs/ai/skills.mdx (via @objectstack/spec)
  • content/docs/api/client-sdk.mdx (via @objectstack/spec)
  • content/docs/api/environment-routing.mdx (via @objectstack/spec)
  • content/docs/api/error-catalog.mdx (via @objectstack/spec)
  • content/docs/api/error-handling-client.mdx (via @objectstack/spec)
  • content/docs/api/error-handling-server.mdx (via @objectstack/spec)
  • content/docs/api/index.mdx (via @objectstack/spec)
  • content/docs/automation/approvals.mdx (via @objectstack/spec)
  • content/docs/automation/connectors.mdx (via @objectstack/spec)
  • content/docs/automation/flows.mdx (via @objectstack/spec)
  • content/docs/automation/hook-bodies.mdx (via packages/spec)
  • content/docs/automation/hooks.mdx (via @objectstack/spec)
  • content/docs/automation/index.mdx (via @objectstack/spec)
  • content/docs/automation/webhooks.mdx (via @objectstack/spec)
  • content/docs/automation/workflows.mdx (via @objectstack/spec)
  • content/docs/concepts/architecture.mdx (via @objectstack/spec)
  • content/docs/concepts/design-principles.mdx (via packages/spec)
  • content/docs/concepts/index.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-driven.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-lifecycle.mdx (via packages/spec)
  • content/docs/concepts/north-star.mdx (via packages/spec)
  • content/docs/data-modeling/analytics.mdx (via @objectstack/spec)
  • content/docs/data-modeling/drivers.mdx (via @objectstack/spec)
  • content/docs/data-modeling/external-datasources.mdx (via @objectstack/spec)
  • content/docs/data-modeling/field-types.mdx (via @objectstack/spec)
  • content/docs/data-modeling/fields.mdx (via @objectstack/spec)
  • content/docs/data-modeling/formulas.mdx (via @objectstack/spec)
  • content/docs/data-modeling/index.mdx (via @objectstack/spec)
  • content/docs/data-modeling/objects.mdx (via @objectstack/spec)
  • content/docs/data-modeling/queries.mdx (via @objectstack/spec)
  • content/docs/data-modeling/schema-design.mdx (via @objectstack/spec)
  • content/docs/data-modeling/seed-data.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation-rules.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation.mdx (via @objectstack/spec)
  • content/docs/deployment/cli.mdx (via @objectstack/spec)
  • content/docs/deployment/troubleshooting.mdx (via @objectstack/spec)
  • content/docs/deployment/validating-metadata.mdx (via @objectstack/spec)
  • content/docs/getting-started/build-with-claude-code.mdx (via @objectstack/spec)
  • content/docs/getting-started/common-patterns.mdx (via @objectstack/spec)
  • content/docs/getting-started/examples.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-reference.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-start.mdx (via @objectstack/spec)
  • content/docs/getting-started/your-first-project.mdx (via @objectstack/spec)
  • content/docs/kernel/cluster.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/auth-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/cache-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/data-engine.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/index.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/metadata-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/storage-service.mdx (via packages/spec)
  • content/docs/kernel/index.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/email-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/index.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/queue-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/sharing-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/sms-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/storage-service.mdx (via packages/spec)
  • content/docs/kernel/services-checklist.mdx (via @objectstack/spec)
  • content/docs/kernel/services.mdx (via @objectstack/spec)
  • content/docs/permissions/authorization.mdx (via @objectstack/spec)
  • content/docs/permissions/permission-sets.mdx (via @objectstack/spec)
  • content/docs/permissions/permissions-matrix.mdx (via @objectstack/spec)
  • content/docs/permissions/positions.mdx (via @objectstack/spec)
  • content/docs/permissions/rls.mdx (via @objectstack/spec)
  • content/docs/permissions/sharing-rules.mdx (via @objectstack/spec)
  • content/docs/plugins/adding-a-metadata-type.mdx (via @objectstack/spec)
  • content/docs/plugins/development.mdx (via @objectstack/spec)
  • content/docs/plugins/index.mdx (via @objectstack/spec)
  • content/docs/plugins/packages.mdx (via @objectstack/spec)
  • content/docs/protocol/backward-compatibility.mdx (via @objectstack/spec)
  • content/docs/protocol/diagram.mdx (via packages/spec)
  • content/docs/protocol/kernel/config-resolution.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/i18n-standard.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/index.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/lifecycle.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/plugin-spec.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/runtime-capabilities.mdx (via @objectstack/spec)
  • content/docs/protocol/knowledge.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/index.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/query-syntax.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/schema.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/security.mdx (via packages/spec)
  • content/docs/protocol/objectql/state-machine.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/actions.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/concept.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/index.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/layout-dsl.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/record-alert.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/widget-contract.mdx (via @objectstack/spec)
  • content/docs/releases/implementation-status.mdx (via @objectstack/spec)
  • content/docs/releases/index.mdx (via @objectstack/spec)
  • content/docs/releases/v12.mdx (via @objectstack/spec)
  • content/docs/releases/v13.mdx (via @objectstack/spec)
  • content/docs/releases/v16.mdx (via @objectstack/spec)
  • content/docs/releases/v17.mdx (via @objectstack/spec)
  • content/docs/releases/v9.mdx (via @objectstack/spec)
  • content/docs/ui/actions.mdx (via @objectstack/spec)
  • content/docs/ui/create-vs-edit-form.mdx (via @objectstack/spec)
  • content/docs/ui/dashboards.mdx (via @objectstack/spec)
  • content/docs/ui/forms.mdx (via @objectstack/spec)
  • content/docs/ui/index.mdx (via @objectstack/spec)
  • content/docs/ui/public-data-collection.mdx (via @objectstack/spec)
  • content/docs/ui/setup-app.mdx (via @objectstack/spec)
  • content/docs/ui/translations.mdx (via @objectstack/spec)
  • content/docs/ui/views.mdx (via @objectstack/spec)

Advisory only. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs origin/main → pass the list as args.docs.

…零运行时读者 (#4579)

按 2026-08-02 委托裁决(remove)整块删除 OpenApi31ExtensionsSchema /
CallbackSchema / OpenApiWebhookEventSchema + RestServerConfig.openApi31 键:
normalizeConfig 只读 api/crud/metadata/batch/routes,/openapi.json 由预生成
契约 enrich 而来,gen:openapi 零 webhook/callback 引用 —— 作者写进
openApi31.webhooks 的定义从未出现在任何服务出的文档里(ADR-0049 假合规)。
三仓(objectstack / cloud@5df2c699b / objectui@785b8a5d4)import 级零消费者。

- rest-server.zod.ts:三 schema 删除留指路注释;openApi31 走 retiredKey()
  墓碑(非 strict schema,裸删会静默剥离 —— requireAuth #3963 同款)
- conversion 评估(#4734 先例):RestServerConfig 是插件 TS 配置面,
  stack 树的 api 块只声明四个 scoping/auth 键,sys_metadata 不可能携带
  openApi31,无源可改写 ⇒ 不登记 D2 conversion,登记 D3 semantic
  migration rest-server-openapi31-block-removed(validateOnly 先例)
- authorable-surface:14 行随三个整 def 出账(#4650 门禁判定 def no
  longer emitted,输出见 PR);api/RestServerConfig:openApi31 → [RETIRED]
- json-schema.manifest.json:三 def 删行(#2978 蓄意移除通道)
- api-surface.json:./api 六行删除(3 const + 3 type)
- 回归 pin(rest-server.test.ts):compiler-API 断言全入口不再命名六个
  导出名(防空转守卫)+ 运行时命名空间一致性;墓碑 sabotage(authored
  openApi31 → 拒绝且文案指向本单;正常键仍过);S1 sabotage 实测两 pin 红
- changeset:@objectstack/spec major(删已发布导出名 + 键,TS2305);
  同 major 内吸收 #4572 的 WebhookEvent→OpenApiWebhookEvent 改名
  (webhook-dual-source-api-side.md 的 TO 指引同步更正)
- 严格性台账:check:strictness-ledger 实跑 PASS,api/ 行属 coarse 汇总
  层(非门禁校验面),不动

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0176qgxgCXTJCUv4YFLtusP9
@os-zhuang
os-zhuang force-pushed the claude/issue-4579-retire-openapi31-block branch from 924e8a2 to 77cd00e Compare August 3, 2026 04:23
@os-zhuang
os-zhuang marked this pull request as ready for review August 3, 2026 04:25
@os-zhuang
os-zhuang enabled auto-merge August 3, 2026 04:25
@os-zhuang
os-zhuang added this pull request to the merge queue Aug 3, 2026
Merged via the queue into main with commit 695cfbd Aug 3, 2026
22 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-4579-retire-openapi31-block branch August 3, 2026 04:47
os-zhuang pushed a commit that referenced this pull request Aug 3, 2026
…§7)

os-regen merge driver 对 json-schema.manifest.json / authorable-surface.json /
api-surface.json 不做文本合并,rebase 回退了蓄意手删;本 commit 重放:manifest
删 system/EnvironmentArtifact* 9 键 + system/Sha256Digest 在列,authorable-surface
删 46 行(#4650 门禁以新 merge-base 695cfbd 重新自证,7 组「def no longer
emitted」),api-surface / spec-changes / upgrade-guide / docs 全量重生成。
复验:check:generated 8/8、check:dual-source-exports(基线 6 → 3)、
strictness-ledger / variant-docs / liveness / empty-state 全绿;spec 测试
292 文件 / 7348 全过;全仓 typecheck 122/122;docs 产物无行首 import/export
(Build Docs 措辞修复在 rebase 后仍生效)。

Claude-Session: https://claude.ai/code/session_0176qgxgCXTJCUv4YFLtusP9

Co-authored-by: Claude <noreply@anthropic.com>
akarma-synetal pushed a commit to akarma-synetal/framework that referenced this pull request Aug 3, 2026
…re 形,./cloud re-export (objectstack-ai#4740) (objectstack-ai#4767)

* feat(spec)!: EnvironmentArtifact 信封收敛为单一声明 —— C10 双源清账,./system 持活 wire 形,./cloud re-export (objectstack-ai#4740)

`EnvironmentArtifact(Input|Schema)` 曾由 `./cloud` 与 `./system` 各自导出一个
声明:cloud 侧是活的 wire 形(checksum 为 64 位 hex 字符串、metadata =
ObjectStackDefinitionSchema),全仓唯一 runtime Zod parse
(packages/metadata/src/plugin.ts `_parseAndRegisterArtifact`)与 cloud 仓
3 处 type import 都用它;system 侧是文档化「v0」(checksum 对象、分类袋
metadata、内联 functions[]、必填 manifest、payloadRef 保留位),三仓
(objectstack / cloud / objectui)import 级实测零代码消费者、从未有 producer
产出过。两侧互相解析不过。按维护者裁决(objectstack-ai#4740,路线 A′)收敛:

- system/environment-artifact.zod.ts 重写为活 wire 形(唯一声明);
  Sha256Digest(Schema) 随声明搬入 ./system(./cloud 仍导出)
- cloud/environment-artifact.zod.ts 改为纯 re-export(同一符号,两个入口)
- 从未实现的 functions / manifest / payloadRef 走 retiredKey() tombstone
  退役(ADR-0049):tsc 处 never、parse 处 prescription;无 ADR-0087
  conversion —— 信封是传输形状,不落 sys_metadata、不在 conversion walker
  的 stack 树上,存量行不可能携带(objectstack-ai#4734 先例逐条评估,论证见 PR)
- v0 家族 16 个导出名(8 const + 8 type)自 ./system 移除;9 个
  system/EnvironmentArtifact* def 停止发布(json-schema.manifest.json
  objectstack-ai#2978 蓄意删键;authorable-surface 46 行经 objectstack-ai#4650 门禁 7 组「def no
  longer emitted」自证删除)
- 符号身份 pin(compiler API,exports-map 枚举 16 入口 + 防空转守卫):
  三名字全入口唯一解析到 src/system/environment-artifact.zod.ts;S1
  (重加被删名)/ S2(cloud 侧新声明的禁止路线)sabotage 均红
- objectstack-ai#4666 盲区:checksum 对象→字符串是 key 级门禁不可见的类型变更,parse
  pin 钉住(旧对象形 → 拒;64 位 hex 字符串 → 过),changeset 显式警示
- packages/metadata runtime parse 一字未动(收敛目标即其已解析形状),
  14 文件 290 测试全绿
- north-star.mdx §6.3 锚点同步(单一声明 + re-export;字段清单改为 wire 形)
- 基线 6 → 3(dual-source-exports.baseline.json 删 3 行)
- changeset:@objectstack/spec major(移除 16 个已发布导出名,TS2305),
  零元数据迁移;strictness-ledger 实跑零变化

Fixes objectstack-ai#4740

Claude-Session: https://claude.ai/code/session_0176qgxgCXTJCUv4YFLtusP9

Co-authored-by: Claude <noreply@anthropic.com>

* fix(docs): 头注措辞避开行首 `import` —— 生成器按行成段,MDX 把该行当 ESM 解析(Build Docs 红)

build-docs.ts 把 docblock 按行拆成独立段落,`system/environment-artifact.zod.ts`
头注中断行后有一行以 `import ` 开头,MDX/acorn 将其解析为 ESM import 语句,
`content/docs/references/system/environment-artifact.mdx` SyntaxError。改写措辞
(「so the chosen entry point can never change the shape a consumer gets」),
重生成后两个 environment-artifact.mdx 均无行首 `import `/`export `(代码围栏内
的 TypeScript Usage 示例不受影响),`pnpm --filter @objectstack/docs build`
exit 0,`check:docs` 248 文件同步。

生成器坑本体(docblock 行成段 + 行首 import 炸 MDX,objectstack-ai#4696 家族)记入 PR 顺带
发现,不在本 PR 修生成器。

Claude-Session: https://claude.ai/code/session_0176qgxgCXTJCUv4YFLtusP9

Co-authored-by: Claude <noreply@anthropic.com>

* chore(spec): rebase 到含 objectstack-ai#4764 的 main 后全量重生成 —— 蓄意删键重放 + 生成物从新基重算(objectstack-ai#4535 §7)

os-regen merge driver 对 json-schema.manifest.json / authorable-surface.json /
api-surface.json 不做文本合并,rebase 回退了蓄意手删;本 commit 重放:manifest
删 system/EnvironmentArtifact* 9 键 + system/Sha256Digest 在列,authorable-surface
删 46 行(objectstack-ai#4650 门禁以新 merge-base 695cfbd 重新自证,7 组「def no longer
emitted」),api-surface / spec-changes / upgrade-guide / docs 全量重生成。
复验:check:generated 8/8、check:dual-source-exports(基线 6 → 3)、
strictness-ledger / variant-docs / liveness / empty-state 全绿;spec 测试
292 文件 / 7348 全过;全仓 typecheck 122/122;docs 产物无行首 import/export
(Build Docs 措辞修复在 rebase 后仍生效)。

Claude-Session: https://claude.ai/code/session_0176qgxgCXTJCUv4YFLtusP9

Co-authored-by: Claude <noreply@anthropic.com>

---------

Co-authored-by: Claude <noreply@anthropic.com>
akarma-synetal pushed a commit to akarma-synetal/framework that referenced this pull request Aug 3, 2026
…ctstack-ai#4634,ADR-0049) (objectstack-ai#4783)

* feat(spec)!: 退役 DriverCapabilities 31 个零读者能力位 —— 全表活性审计,3 活 31 死 (objectstack-ai#4634)

objectstack-ai#4484 findStream 收尾发现 streaming 位指向已删除的契约方法;按 issue 自述倾向对
DriverCapabilitiesSchema 全部 34 位做两仓活性审计(objectstack + cloud,objectui
零引用确认):仅 queryDateGranularity(engine 聚合分派 + date-bucket parity)、
autonumber(engine 让渡自增生成)、batchSchemaSync(engine 与方法存在性 AND)
三位有决策读者;其余 31 位人人写、无人读,describe 承诺的引擎降级路径从未存在,
且零读者让写错的值(SqlDriver streaming:false 却实现 findStream;InMemoryDriver
streaming:true 却全表物化)三个版本无人发现 —— ADR-0078 假可供性。

- driver.zod.ts:31 位 retiredKey() 墓碑(非 strict schema,裸删会被静默剥离;
  DriverConfigSchema.capabilities 及 SQL/NoSQL 扩展确有 parse 路径),逐位
  prescription 指明真实机制(方法存在性门控:beginTransaction / aggregate /
  syncSchema;objectstack-ai#4001 教训);batchSchemaSync .default(false) → .optional()
  (两处读者本就按缺省=false 消费)
- ADR-0087 评估(objectstack-ai#4484/objectstack-ai#4764 先例):driver 是代码不是 stack 树元数据,
  supports 字面量在 driver 类里、DriverConfig 是插件 TS 配置,均非 sys_metadata
  形态(stack 树近邻 datasource.capabilities 已于 objectstack-ai#4583 单独退役)⇒ 不登记 D2
  conversion,登记 D3 semantic migration driver-capabilities-inert-bits-removed
- driver 字面量同步:memory {} / mongodb { batchSchemaSync: true } /
  sql { queryDateGranularity, autonumber, batchSchemaSync: false }
- 回归 pin(driver.test.ts):31 位逐位 parse 拒绝 + prescription 断言;
  compiler-API 断言 34 键形状且退役位类型坍缩为 undefined、活位可写(反空转
  守卫);S1(schema 复活 streaming)5 pin 红、S2(driver 字面量复活)TS2416
  红,均实跑验证后还原
- 生成物:authorable-surface 31 行 [RETIRED]、spec-changes / upgrade-guide /
  references docs 全量再生成;14 项 spec 门禁全绿,全仓 typecheck 122 任务绿
- changeset:spec + 三 driver 包 major,FROM→TO 映射与一行修复齐备

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0176qgxgCXTJCUv4YFLtusP9

* chore(spec): merge main(含 C10 objectstack-ai#4767)后按规重整生成物 —— 三敏感文件取 main 版再重生成

json-schema.manifest.json / authorable-surface.json / dual-source-exports.baseline.json
一律先取 origin/main 版本(避免静默复活 C10 蓄意删除的 system/EnvironmentArtifact*
键),再以合并后源码全量重跑 gen:schema/check:generated:DriverCapabilities 31 行
[RETIRED] 由生成器重新写入,manifest 与 authorable-surface 中 C10 删键保持已删
(实测两文件 system/EnvironmentArtifact 零残留)。8/8 生成物门禁 + 8 项源码审计
全 PASS,spec 292 文件 7374 测试全绿。

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0176qgxgCXTJCUv4YFLtusP9

---------

Co-authored-by: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/l tests tooling

Projects

None yet

2 participants